package com.atguigu.spzx.manager.controller;

import com.atguigu.spzx.manager.service.SysRoleService;
import com.atguigu.spzx.model.dto.system.SysRoleDto;
import com.atguigu.spzx.model.entity.system.SysRole;
import com.atguigu.spzx.model.vo.common.Result;
import com.atguigu.spzx.model.vo.common.ResultCodeEnum;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author SNA
 * @date 2024/6/15
 * @Description
 **/
@RestController
@RequestMapping(value = "/admin/system/sysRole")
public class SysRoleController {

    @Autowired
    private SysRoleService sysRoleService;


    /**
     * 删除角色信息。
     * 接收一个Long类型的roleId作为参数，用于删除指定角色信息。
     * @param roleId 待删除的角色ID。
     * @return 包含操作状态的结果对象。
     */
    @DeleteMapping(value = "deleteById/{roleId}")
    public Result deleteById(@PathVariable(value = "roleId") Long roleId) {
        sysRoleService.deleteById(roleId);
        return Result.build(null, ResultCodeEnum.SUCCESS);
    }

    /**
     * 更新角色信息。
     * 接收一个SysRole对象作为参数，用于更新角色信息。
     * @param sysRole 待更新的角色对象。
     * @return 包含操作状态的结果对象。
     */
    @PutMapping(value = "updateSysRole")
    public Result updateSysRole (@RequestBody SysRole sysRole) {
        sysRoleService.updateSysRole(sysRole);
        return Result.build(null, ResultCodeEnum.SUCCESS);
    }

    /**
     * 添加角色信息。
     * 接收一个SysRole对象作为参数，用于保存新的角色信息。
     * @param sysRole 待添加的角色对象。
     * @return 包含操作状态的结果对象。
     */
    @PostMapping(value = "/saveSysRole")
    public Result saveSysRole(@RequestBody SysRole sysRole) {
        sysRoleService.saveSysRole(sysRole);
        return Result.build(null, ResultCodeEnum.SUCCESS);
    }

    /**
     * 分页查询角色信息。
     * 通过SysRoleDto对象获取查询条件，结合分页参数pageNum和pageSize，从数据库中分页查询角色数据。
     * @param sysRoleDto 查询条件对象，包含可能的角色查询条件。
     * @param pageNum 当前页码，用于指定从数据库中返回哪一页的数据。
     * @param pageSize 每页的记录数，用于指定每页返回的数据量。
     * @return 包含查询结果的分页信息和操作状态的结果对象。
     */
    @PostMapping(value = "/findByPage/{pageNum}/{pageSize}")
    public Result<PageInfo<SysRole>> findByPage(@RequestBody SysRoleDto sysRoleDto,
                                                @PathVariable(value = "pageNum") Integer pageNum,
                                                @PathVariable(value = "pageSize") Integer pageSize) {

        PageInfo<SysRole> pageInfo = sysRoleService.findByPage(sysRoleDto, pageNum, pageSize);
        return Result.build(pageInfo, ResultCodeEnum.SUCCESS);
    }
}
